Oracle 取出动态sql 执行的结果的两种方式 |
您所在的位置:网站首页 › oracle 导出查询结果 › Oracle 取出动态sql 执行的结果的两种方式 |
----------------------------以下是怎么取出动态sql执行结果的两种方式--------------------------------------------- 第一种:直接 execute immediate ‘insert into newTable (id,name ) select id,name from dual’; 执行后 放到一个新的表里 第二种方式:放到REF CURSOR 声明REF游标 该方式分为两种: 第一种取出整表的所有列(USER_LOG 为我数据库中的表 ,自己测试需替换为自己的表) create or replace procedure testdesclare1 is v_sql varchar2(1000); tp1 varchar2(100); tp2 varchar2(50); tp8 varchar2(50); tp9 varchar2(50); begin select to_char(sysdate,'yyyy')||'0101' into tp9 from dual; select to_char(sysdate,'yyyyMMdd') into tp8 from dual; tp1:='select * from USER_LOG where to_char(operate_time,'||'''yyyyMMdd'''||')'; tp2:=' between '||tp9||' and '||tp8; --拼接动态sql语句 v_sql :=tp1||tp2; --declare是执行一个代码块,开始有declare begin end;为结构体 。 一个存储过程begin end 中只能声明一个declare declare --声明一个行类型变量USER_LOG%ROWTYPE 其中USER_LOG 与上面动态sql中的 查询表名一致 r_emp USER_LOG%ROWTYPE; --声明一个行类型变量 TYPE c_type IS REF CURSOR; --声明REF游标类型 cur c_type; --声明REF游标类型的变量 begin -- 结构体开始 Open cur For v_sql; loop fetch cur into r_emp; exit when cur%notfound; dbms_output.put_line(r_emp.id||'='||r_emp.result);--取出里面的列值 /*结果是一个list:5175=共成功导入1条数据 5176=共成功导入1条数据 */ end loop; close cur; end; -- 结构体结束 end testdesclare1; 第一种取出表中的其中几列(USER_LOG 为我数据库中的表 ,自己测试需替换为自己的表) create or replace procedure testdesclare1 is v_sql varchar2(1000); tp1 varchar2(100); tp2 varchar2(50); tp8 varchar2(50); tp9 varchar2(50); begin select to_char(sysdate,'yyyy')||'0101' into tp9 from dual; select to_char(sysdate,'yyyyMMdd') into tp8 from dual; tp1:='select id,result from USER_LOG where to_char(operate_time,'||'''yyyyMMdd'''||')'; tp2:=' between '||tp9||' and '||tp8; --拼接动态sql语句 v_sql :=tp1||tp2; --declare是执行一个代码块,开始有declare begin end;为结构体 。 -一个存储过程begin end 中只能声明一个declare declare --声明一个行类型变量USER_LOG%ROWTYPE 其中USER_LOG 与上面动态sql中的 查询表名一致 r_emp_id USER_LOG.id%TYPE; --声明一个列类型变量,与上面的整表不一致 r_emp_result USER_LOG.result%TYPE; --声明一个列类型变量,与上面的整表不一致 TYPE c_type IS REF CURSOR; --声明REF游标类型 cur c_type; --声明REF游标类型的变量 begin -- 结构体开始 Open cur For v_sql; loop fetch cur into r_emp_id ,r_emp_result ; exit when cur%notfound; dbms_output.put_line(r_emp_id||'='||r_emp_result);--取出里面的列值 /*结果是一个list:5175=共成功导入1条数据 5176=共成功导入1条数据 */ end loop; close cur; end; -- 结构体结束 end testdesclare1; |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |